

package gerenciadorDeMemoria;

import java.util.LinkedList;

/**
 *
 * @author lucas
 */
public class NRU {

	private LinkedList<Integer> classe0;
	private LinkedList<Integer> classe1;
	private LinkedList<Integer> classe2;
	private LinkedList<Integer> classe3;

	public NRU(){
		classe0 = new LinkedList<Integer>();
		classe1 = new LinkedList<Integer>();
		classe2 = new LinkedList<Integer>();
		classe3 = new LinkedList<Integer>();
}

   public int getFrameToSwap(){
	   if (!classe0.isEmpty()){
		   return classe0.removeFirst();
	   } 
	   if (!classe1.isEmpty()){
		   return classe1.removeFirst();
	   }
	   if (!classe2.isEmpty()){
			return classe2.removeFirst();
	   }
	   if (!classe3.isEmpty()){
			    		return classe3.removeFirst();
	   }
	   return 0;
   }
   
   public void atualizaClasses(){
	  for (int i = 0; i <  MemoriaFisica.framesOcupados; i++){
		  if (! MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitRecently() && 
				  ! MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitModified()) { this.classe0.add(i);}
		  if (! MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitRecently() &&  
				  MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitModified()) { this.classe1.add(i);}  
		  if ( MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitRecently() && 
				  !MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitModified()) { this.classe2.add(i);}
		  if ( MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitRecently() && 
				  MemoriaFisica.frames[i].getProcesso().getTabelaDePaginas()[MemoriaFisica.frames[i].getPagina()].getBitModified()) { this.classe0.add(i);}  
	  }
   }
   		
   
    
    
    
}
